package main

import (
	"log"
	"math/rand"
)

// 多个goroutine 使用select 进行扇入
func main() {
	ch := demo1()
	for i := 0; i < 100; i++ {
		log.Println("随机数", <-ch)
	}
}

// 多个goroutine
func demo1() chan int {
	ch := make(chan int, 20)
	// 这里源源不断放入
	// 只要读取完一个就放入
	go func(c1 chan int) {
		for {
			select {
			case c1 <- <-demoAGo():
			case c1 <- <-demoBGo():
			}
		}
	}(ch)

	return ch
}

func demoAGo() chan int {
	ch := make(chan int, 10)

	go func(ci chan int) {
		for {
			ci <- rand.Int()
		}
	}(ch)

	return ch
}

func demoBGo() chan int {
	ch := make(chan int, 10)

	go func(ci chan int) {
		for {
			ci <- rand.Int()
		}
	}(ch)

	return ch
}
